package materials.matrix;

/**
 * A Type Definition of A Matrix as an Interface
 * @author Sheepy
 *
 */
public interface MatrixMaterialInterface {


	public void printMatrix();
	
	public int getM();

	public int getN();
	/**
	 * Set's a Double Value to the parametric x-y Coordinates
	 * 
	 * @param x - XCoordinate of the Matrix
	 * @param y - YCoordinate of the Matrix
	 * @require x > 0
	 * @require y > 0
	 * @param value - The Value the Entry is set to
	 */
	public void setValue(int x, int y, double value);

	/**
	 * Delivers a value from the parametric x-y Coordinates
	 * 
	 * @param x - xCoordinate of the Matrix
	 * @param y - yCoordinate of the Matrix
	 * @require x > 0
	 * @require y > 0
	 * @return The Value of the Entry
	 */
	public double getValue(int x, int y);

	/**
	 * Delivers a Array of a special Row in the Matrix
	 * 
	 * @param row - the Row the Array should delivered for
	 * @require row > 0
	 * @return Array of Doubles
	 */
	public double[] getRow(int row);

	/**
	 * Delivers a Array of a special Column in the Matrix
	 * 
	 * @param column - the Column the Array should delivered for
	 * @require column > 0
	 * @return Array of Doubles
	 */
	public double[] getColumn(int column);

	/**
	 * Returns the maximal Row or Column which contains Values
	 * @return int - Size of the Matrix
	 */
	public int getSize();
}
